package xyz.lwm.lazycat.transaction.execute;

import java.sql.Connection;
import java.util.List;

/**
 * 事务信息
 *
 * @author lwm
 */
public interface Transaction {

    /**
     * 事务隔离级别
     */
    Isolation getIsolation();

    /**
     * 是否已开启
     */
    boolean isOpen();

    /**
     * 是否只读
     */
    boolean isReadOnly();

    /**
     * 是否完成 (commit or rollback)
     */
    boolean isCompleted();

    /**
     * 提交事务
     */
    void commit();

    /**
     * 回滚事务
     */
    void rollback();

    /**
     * 获取事务关联的数据库连接
     */
    Connection getConnection();

    /**
     * 设置父事务
     */
    void setParent(Transaction parent);

    /**
     * 获取嵌套的子事务
     */
    List<Transaction> children();

}
